package com.pearadmin.modules.sys.service.impl;

import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pearadmin.common.tools.SpringUtil;
import com.pearadmin.common.web.domain.request.PageDomain;
import com.pearadmin.modules.sys.domain.AnodeCode;
import com.pearadmin.modules.sys.mapper.AnodeCodeMapper;
import com.pearadmin.modules.sys.service.IAnodeCodeService;
import com.pearadmin.modules.sys.service.ISysFileService;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

/**
 * 阳极编号Service业务层处理
 *
 * @author Mr.Ling
 * @date 2021-11-26
 */
@Service
public class AnodeCodeServiceImpl implements IAnodeCodeService {
    @Autowired
    private AnodeCodeMapper anodeCodeMapper;
    //碳块类型
    private String hignNum = "highNum";

    /**
     * 查询阳极编号
     *
     * @param id 阳极编号ID
     * @return 阳极编号
     */
    @Override
    public AnodeCode selectAnodeCodeById(String id) {
        return anodeCodeMapper.selectAnodeCodeById(id);
    }

    /**
     * 查询阳极编号列表
     *
     * @param anodeCode 阳极编号
     * @return 阳极编号
     */
    @Override
    public List<AnodeCode> selectAnodeCodeList(AnodeCode anodeCode) {
        return anodeCodeMapper.selectAnodeCodeList(anodeCode);
    }

    /**
     * 查询阳极编号
     *
     * @param anodeCode  阳极编号
     * @param pageDomain 分页实体
     * @return 阳极编号 分页集合
     */
    @Override
    public PageInfo<AnodeCode> selectAnodeCodePage(AnodeCode anodeCode, PageDomain pageDomain) {
        PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit());
        List<AnodeCode> data = anodeCodeMapper.selectAnodeCodeList(anodeCode);
        return new PageInfo<>(data);
    }

    /**
     * 将阳极编号生成为二维码并上传图片
     * /todo 修改成编号导入 不需要 碳块规格
     * @param anodeCode  阳极编号
     * @param qrCodePath 默认二维码路径
     *
     */
    @Override
    public int insertAnodeCode(AnodeCode anodeCode, String qrCodePath) throws IOException {
        //导杆编号： BHY100001-BHY199999
        String code = anodeCode.getCode();
        File qrFile = FileUtil.file(qrCodePath);
        File file = QrCodeUtil.generate(
                //二维码内容
                code,
                300,
                300,
                //附带图片logo
                //QrConfig.create().setImg(imgFile),
                //写出到文件
                qrFile
        );
        FileInputStream input = new FileInputStream(file);
        MultipartFile multiFile = new MockMultipartFile("file", qrFile.getName(), "text/plain", IOUtils.toByteArray(input));
        String fileId = getSysFileService().upload(multiFile);
        anodeCode.setFileId(fileId);
        anodeCode.setCode(code);
        return anodeCodeMapper.insertAnodeCode(anodeCode);
    }

    /**
     * 修改阳极编号
     *
     * @param anodeCode 阳极编号
     * @return 结果
     */
    @Override
    public int updateAnodeCode(AnodeCode anodeCode) {
        return anodeCodeMapper.updateAnodeCode(anodeCode);
    }

    /**
     * 删除阳极编号对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteAnodeCodeByIds(String[] ids) {
        return anodeCodeMapper.deleteAnodeCodeByIds(ids);
    }

    /**
     * 删除阳极编号信息
     *
     * @param id 阳极编号ID
     * @return 结果
     */
    @Override
    public int deleteAnodeCodeById(String id) {
        return anodeCodeMapper.deleteAnodeCodeById(id);
    }

    @Override
    public AnodeCode selectByCode(String code) {
        return anodeCodeMapper.selectByCode(code);
    }

    public ISysFileService getSysFileService() {
        return (ISysFileService) SpringUtil.getBean("SysFileServiceImpl");
    }
}
